home *** CD-ROM | disk | FTP | other *** search
Text File | 1991-01-28 | 967 b | 34 lines | [TEXT/gamI] |
- ; Trace macro
-
- (##define-macro (trace name)
- `(let ((##old ,name))
- (set! ,name
- (lambda l
- (let ((env (##entry-of ',name l)))
- (##return-of ',name (apply ##old l) env))))))
-
- (define (##entry-of name l)
- (let ((indent (+ (##fluid-ref '##indent 0) 1)))
- (let ((env (##fluid-bind '##indent indent)))
- (let loop ((i 0))
- (if (< i indent)
- (begin
- (display (if (= (remainder i 5) 0) "|" " ") ##stdout)
- (loop (+ i 1)))))
- (##wr-limited (cons name l) ##stdout #f #t (- 79 indent))
- (newline ##stdout)
- env)))
-
- (define (##return-of name val env)
- (let ((indent (##fluid-ref '##indent 0)))
- (let loop ((i 0))
- (if (< i indent)
- (begin
- (display (if (= (remainder i 5) 0) "|" " ") ##stdout)
- (loop (+ i 1)))))
- (display "<== " ##stdout)
- (##wr-limited val ##stdout #f #t (- 75 indent))
- (newline ##stdout)
- (##fluid-unbind env)
- val))
-